package dao;

import java.util.ArrayList;

import model.Lid;
import model.interfaces.Lidmaatschap;
import model.lidmaatschap.Actief;
import model.lidmaatschap.Rustend;
import dao.interfaces.LidDao;

public class LidDaoMock implements LidDao {

	private static LidDaoMock instance;
	private ArrayList<Lid> leden;

	private LidDaoMock() {
		leden = new ArrayList<Lid>();
		leden.add(new Lid("Lid1", 20, "Adres1"));
		leden.add(new Lid("Lid2", 16, "Adres1"));
		leden.add(new Lid("Lid3", 29, "Adres1"));
		Lid lid = new Lid("Lid4", 25, "Adres1");
		lid.setLidmaatschap(new Rustend());
		leden.add(lid);
	}

	public static LidDaoMock getInstance() {
		if (instance == null) {
			instance = new LidDaoMock();
		}
		return instance;
	}

	public Lid getLid(String naam) {
		for (Lid l : leden) {
			if (l.getNaam().equalsIgnoreCase(naam)) {
				return l;
			}
		}
		return null;
	}

	public void addLid(String naam, int leeftijd, String adres) {
		boolean gevonden = false;
		for (Lid l : leden) {
			if (l.getNaam().equalsIgnoreCase(naam)) {
				gevonden = true;
			}
		}
		if (!gevonden) {
			leden.add(new Lid(naam, leeftijd, adres));
		}
	}

	@Override
	public void veranderLid(String oudeNaam, String naam, int leeftijd,
			String adres) {
		System.out.println("Verander lid aangeroepen");

	}

	@Override
	public void verwijderLid(String naam) {
		System.out.println("Verwijder lid aangeroepen");

	}

	@Override
	public ArrayList<Lid> getLedenlijst() {
		return leden;
	}

	@Override
	public ArrayList<Lid> getActieveLeden() {
		ArrayList<Lid> actief = new ArrayList<Lid>();
		for (Lid l : leden) {
			if (l.getLidmaatschap() instanceof Actief) {
				actief.add(l);
			}
		}
		return actief;
	}

	@Override
	public ArrayList<Lid> getRustendeLeden() {
		ArrayList<Lid> rustend = new ArrayList<Lid>();
		for (Lid l : leden) {
			if (l.getLidmaatschap() instanceof Rustend) {
				rustend.add(l);
			}
		}
		return rustend;
	}

	@Override
	public void veranderLidmaatschap(Lid lid, Lidmaatschap lidmaatschap) {
		lid.setLidmaatschap(lidmaatschap);
	}

	@Override
	public void koopArtikel(Lid lid, int soort) {
		System.out.println("Koop artikel aangeroepen voor" + lid.getNaam() + " artikel soort: " + soort);
	}

	@Override
	public String getAankoopGeschiedenis(Lid lid) {
		System.out.println("aankoopgeschiedenis aangeroepen van "+ lid.getNaam());
		return "";
	}

	@Override
	public void meldLidAf(Lid lid) {
		leden.remove(lid);
	}

	@Override
	public double getContributie() {
		double contributie = 0.0;
		for (Lid l : leden) {
			contributie += l.visit(l.getLidmaatschap());
		}
		return contributie;
	}

}
